Storage systems may include one or more disk arrays. Disk arrays may use a variety of storage devices with various characteristics for providing storage. Each storage array may logically operate as a unified storage device. While such organization generally allows for a homogenous view of the storage devices, it is sometime useful to organize the various storage devices into tiers or classes of storage. A tier is generally delineated by differences in at least one of the four following attributes: price, performance, capacity and function. For example, tier 1 storage devices may be comprised of storage media that is very reliable and very fast, such as flash memory. Tier 2 storage devices may be comprised of storage media that is slower than tier 1 media but very reliable (e.g., a hard disk). For example, tier 2 storage devices may include high performance disks such as 15,000 RPM Fibre Channel (FC) Disks. Tier 3 storage devices may be comprised of comparatively slower and cheaper storage media than either tier 1 or tier 2, such as 7200 RPM serial ATA (SATA) disks, Storage system may also include one or more storage array processors (SPs) for handling both requests for allocation and input/output (I/O) requests. An SP is the controller for and primary interface to a storage array.
Storage arrays are typically used to provide storage space for one or more computer file systems, databases, applications, and the like. For this and other reasons, it is common for storage arrays to be structured into logical partitions of storage space, called logical units (also referred to herein as LUs or LUNs). For example, at LUN creation time, storage system may allocate storage space of various storage devices in disk array to be presented as a volume for use by a server system. This allows a unified storage array to appear as a collection of separate file systems, network drives, and/or volumes.
Recognizing the fact that more storage space may be provisioned than may actually be used at first, the concept of a sparsely populated or “thin” logical unit (TLU) was developed. Unlike the more traditional “fat” or fully allocated logical unit (FLU), which is created by provisioning and allocating a certain amount of storage area, a TLU is provisioned at creation but is not allocated any storage media until the storage is actually needed. For example, storage media space may be allocated to the TLU upon receipt of an I/O write request from a requesting entity, referred to herein as a “host”. Upon receipt of the write request from the host, the SP may then determine whether there is enough space already allocated to the TLU to store the data being written, and if not, allocate to the TLU additional storage space (e.g., a logical portion or slice of free space).
While thin logical units provide distinct advantages over fully allocated logical units (i.e., where the entire storage space requested is actually allocated and reserved for the exclusive use of the requesting entity at LUN creation time), the manner in which the slices are allocated across storage media can have an enormous impact on the performance of the storage system. In particular, traditional block allocation mechanisms generally allocate storage using naïve approaches that do not account for a variety of factors that may affect storage performance. For example, naïve approaches may include a round-robin approach which attempts to allocate space evenly from each storage device and a most-space available approach which allocates space from a storage device with the most space available. Such approaches, however, are not very effective if there are discrepancies between storage devices in the system, especially if such discrepancies become greater as space is allocated. For example, a most-space available approach in a tiered storage system can result in a relatively high percentage of storage space being allocated from a slow storage device with a huge capacity, such as large capacity SATA disks, while faster storage devices (e.g., an enterprise flash drive (EFD)) may go under-utilized or ill-utilized.
Accordingly, in order to avoid potential pitfalls that are inherent in naïve approaches to allocation, there exists a need for an efficient approach to allocation that uses a plurality of factors. Specifically, there exists a need for methods, systems, and computer readable medium for an adaptive block allocation mechanism.